package com.bnz.proxy;

import com.bnz.dao.UserDao;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//jdk实现动态代理
public class UserDaoJDKDynaProxyImpl {
    // 引入目标对象
    private UserDao userDao;
    public UserDaoJDKDynaProxyImpl(UserDao userDao){
        this.userDao = userDao;
    }
    // 得到代理对象
    public UserDao createProxyObject(){
        // 代表当前目标对象的类加载器 参数2：目标对象的实现的所有的接口类型数组 参数3：代表实现了InvocationHandler接口的对象
        return (UserDao) Proxy.newProxyInstance(this.getClass().getClassLoader(),userDao.getClass().getInterfaces(),this);
    }

    // 用它来调用你的目标对象的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 如果调用的是query（）方法，则进行安全性检查
        if(method.getName().equals("query")){
            checkSecurity();
        }
        return method.invoke(userDao,args);
    }

    private void checkSecurity(){
        System.out.println("【JDK的动态代理】---》进行安全性检查。。。");
    }
}
